home *** CD-ROM | disk | FTP | other *** search
/ Aminet 15 / Aminet 15 - Nov 1996.iso / Aminet / comm / mail / YamNet.lha / rexxtra12.lha / rexx / DirIndex.rexx < prev    next >
OS/2 REXX Batch file  |  1990-03-18  |  2KB  |  90 lines

  1. /* DirIndex.rexx */
  2.  
  3. /*
  4.       Format
  5.  
  6.     DIRINDEX [DIR] <directory> [[OUTPUT] <outfile>]
  7.  
  8.     Argument One: the directory to start at. Lists all
  9.     sub-directories, sub-sub-directories,... Output is sent to
  10.     STDOUT, unless a second argument is specified, then the
  11.     output is sent to the specified output file.
  12.  
  13.     Note: the output is NOW sorted.
  14.  
  15. */
  16. signal on break_c; signal on break_d; signal on break_e; signal on break_f
  17. call addlib 'rexxextra.library',-20,-30,0
  18.  
  19. facility = 'DirIndex'
  20. retcode = 0
  21. template = 'DIR/A,OUTPUT'
  22. dtemplate = template
  23. args. = ''
  24.  
  25. parse arg g_c
  26. do while g_c='?'
  27.   options prompt dtemplate': '  /* this template is      */
  28.   parse pull g_c        /* displayed to the user */
  29.   if g_c='?' then do
  30.     g_s=sourceline(3)
  31.     if pos('/*',g_s)=0 then break; if pos('*/',g_s)>0 then break
  32.     say
  33.     g_s=sourceline(4)
  34.     do i=5 while pos('*/',g_s)=0; say g_s; g_s=sourceline(i); end
  35.     say
  36.     end
  37.   end
  38. interpret Cparse(g_c,template,'args')
  39. if args.ERRCODE > 1 then do; say facility'-E-BADARGS,' args.ERRTEXT; exit 5; end
  40.  
  41. outfile = 'STDOUT'
  42.  
  43. if args.OUTPUT ~= '' then do
  44.   if open('OUTFILE',args.OUTPUT,'w') then outfile = 'OUTFILE'
  45.   else do
  46.     say facility'-E-OPENIN, cannot open' args.OUTPUT
  47.     exit 5
  48.     end
  49.   end
  50.  
  51. dev = args.DIR
  52. if right(dev,1) = '/' then dev = left(dev,length(dev)-1)
  53. call writeln outfile, dev
  54. list = sortwords(showdir(dev,'D'))
  55. if right(dev,1) ~= ':' & right(dev,1) ~= '/' then dev = dev'/'
  56. do j = 1 to words(list)
  57.   dire = dev||word(list,j)
  58.   call writeln outfile, dire
  59.   call ldir dire
  60.   end
  61.  
  62. GetOut:
  63. if outfile ~= 'STDOUT' then call close outfile
  64. exit retcode
  65.  
  66. break_c:
  67. break_d:
  68. break_e:
  69. break_f:
  70.   say facility'-E-BREAK, Control-C interrupt'; retcode = 20; signal GetOut
  71. failure:
  72.   say facility'-E-FAIL, Line:' sigl', Error:' rc; retcode = rc; signal GetOut
  73. syntax:
  74.   say facility'-E-SYNTAX, Line:' sigl', Error:' rc; retcode = rc; signal GetOut
  75. error:
  76.   say facility'-E-ERROR, Line:' sigl', Error:' rc; retcode = rc; signal GetOut
  77.  
  78. ldir: procedure expose outfile
  79.   parse arg dire
  80.   if exists(dire) then do
  81.     list = sortwords(showdir(dire,'D'))
  82.     do j = 1 to words(list)
  83.       nextdir = dire'/'word(list,j)
  84.       call writeln outfile, nextdir
  85.       call ldir nextdir
  86.       end
  87.     end
  88. return 0
  89.  
  90.